package model

import (
	"ginblog/utils/errormsg"
	"gorm.io/gorm"
)

type Category struct {
	ID   uint   `gorm:"primary_key; auto_increment" json:"id"`
	Name string `gorm:"type: varchar(20); not null" json:"name"`
}

//func (c Category) TableName() string {
//	return "category"
//}

// 查询分类是否存在
func CheckCategory(name string) int {
	var cate Category
	// 查询数据库中的第一条数据
	db.Select("id").Where("name = ?", name).First(&cate)
	if cate.ID > 0 {
		return errormsg.ERROR_CATENAME_USED
	}
	return errormsg.SUCCESS
}

// 新增分类
func CreateCategory(data *Category) int {
	err := db.Create(&data).Error
	if err != nil {
		return errormsg.ERROR // 500
	}
	return errormsg.SUCCESS
}

// 查询单个分类信息
func GetCateInfo(id int) (Category, int) {
	var cate Category
	db.Where("id = ?", id).First(&cate)
	return cate, errormsg.SUCCESS
}

// 查询分类列表
func GetCategories(pageSize int, pageNum int) ([]Category, int64) {
	var cate []Category
	// 返回总数
	var total int64
	// 传入的pageSize为-1 则不需要 分页 同理 pageNum 传入为-1 也不需要分页
	// 这里是通过limit分页获取用户列表
	err = db.Find(&cate).Offset((pageNum - 1) * pageSize).Limit(pageSize).Error
	db.Model(&cate).Count(&total)
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, 0
	}
	return cate, total
}


// 编辑分类信息
func EditCategory(id int, data *Category) int {
	// 使用map传参来更新数据库中的数据 因为gorm使用结构体更新数据 不会更新0值
	var maps = make(map[string]interface{})
	maps["name"] = data.Name
	// 更新的语句
	err := db.Model(&Category{}).Where("id = ?", id).Updates(maps).Error
	if err != nil {
		return errormsg.ERROR
	}
	return errormsg.SUCCESS
}

// 删除分类
func DeleteCategory(id int) int {
	err := db.Where("id = ?", id).Delete(&Category{}).Error
	if err != nil {
		return errormsg.ERROR
	}
	return errormsg.SUCCESS
}
